package com.xiaoquan.gulimall.cart.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @authro dxq
 * @date 2021年07月06日 20:11
 */
// @EnableConfigurationProperties(ThreadPoolConfigProperties.class) // 相当于不写@Component 也行
@Configuration
public class MyThreadConfig {
        // 创建一个线程池
        // 变成可配置的
        @Bean
        public ThreadPoolExecutor threadPoolExecutor(ThreadPoolConfigProperties pool){
             return   new ThreadPoolExecutor(pool.getCoreSize(),  // 核心线程数
                        pool.getMaxSize(),   // 最多线程数
                        pool.getKeepAliveTime(), // 线程活跃时间
                        TimeUnit.SECONDS, // 时间单位 秒
                        new LinkedBlockingDeque<>(100000), // 阻塞队列 最多存储10万个线程数
                        Executors.defaultThreadFactory(), // 默认工厂
                        new ThreadPoolExecutor.AbortPolicy()); // 拒绝策略 新任务来了 就直接抛弃
        }
}
